@@ -1,7 +1,7 @@ |
||
1 | 1 |
module LiquidInterpolatable |
2 | 2 |
extend ActiveSupport::Concern |
3 | 3 |
|
4 |
- def interpolate_options options, payload |
|
4 |
+ def interpolate_options(options, payload) |
|
5 | 5 |
duped_options = options.dup.tap do |duped_options| |
6 | 6 |
duped_options.each_pair do |key, value| |
7 | 7 |
if value.class == String |
@@ -14,7 +14,7 @@ module LiquidInterpolatable |
||
14 | 14 |
duped_options |
15 | 15 |
end |
16 | 16 |
|
17 |
- def interpolate_string string, payload |
|
17 |
+ def interpolate_string(string, payload) |
|
18 | 18 |
Liquid::Template.parse(string).render(payload) |
19 | 19 |
end |
20 | 20 |
|
@@ -20,9 +20,9 @@ module LiquidMigrator |
||
20 | 20 |
end |
21 | 21 |
hash[key] = LiquidMigrator.convert_string value, options[:leading_dollarsign_is_jsonpath] |
22 | 22 |
when 'Hash' |
23 |
- # might want to make it recursive? |
|
23 |
+ raise "nested Hashes are not supported at the moment" |
|
24 | 24 |
when 'Array' |
25 |
- # do we need it? |
|
25 |
+ raise "nested Arrays are not supported at the moment" |
|
26 | 26 |
end |
27 | 27 |
end |
28 | 28 |
# remove the unneeded *_path attributes |
@@ -51,7 +51,14 @@ module LiquidMigrator |
||
51 | 51 |
end |
52 | 52 |
|
53 | 53 |
def self.convert_json_path(string, filter = "") |
54 |
- "{{#{string[2..-1].gsub(/\.\*\Z/, '')}#{filter}}}" |
|
54 |
+ check_path(string) |
|
55 |
+ "{{#{string[2..-1]}#{filter}}}" |
|
56 |
+ end |
|
57 |
+ |
|
58 |
+ def self.check_path(string) |
|
59 |
+ if string !~ /\A(\$\.)?(\w+\.)*(\w+)\Z/ |
|
60 |
+ raise "JSONPath '#{string}' is too complex, please check your migration." |
|
61 |
+ end |
|
55 | 62 |
end |
56 | 63 |
end |
57 | 64 |
|
@@ -5,7 +5,6 @@ describe LiquidMigrator do |
||
5 | 5 |
it "should work" do |
6 | 6 |
LiquidMigrator.convert_string("$.data", true).should == "{{data}}" |
7 | 7 |
LiquidMigrator.convert_string("$.data.test", true).should == "{{data.test}}" |
8 |
- LiquidMigrator.convert_string("$.data.test.*", true).should == "{{data.test}}" |
|
9 | 8 |
end |
10 | 9 |
|
11 | 10 |
it "should ignore strings which just contain a JSONPath" do |
@@ -13,12 +12,14 @@ describe LiquidMigrator do |
||
13 | 12 |
LiquidMigrator.convert_string(" $.data", true).should == " $.data" |
14 | 13 |
LiquidMigrator.convert_string("lorem $.data", true).should == "lorem $.data" |
15 | 14 |
end |
15 |
+ it "should raise an exception when encountering complex JSONPaths" do |
|
16 |
+ expect { LiquidMigrator.convert_string("$.data.test.*", true) }. |
|
17 |
+ to raise_error("JSONPath '$.data.test.*' is too complex, please check your migration.") |
|
18 |
+ end |
|
16 | 19 |
end |
17 | 20 |
|
18 | 21 |
describe "converting escaped JSONPath strings" do |
19 | 22 |
it "should work" do |
20 |
- LiquidMigrator.convert_string("Received <$.content.text.*> from <$.content.name> .").should == |
|
21 |
- "Received {{content.text}} from {{content.name}} ." |
|
22 | 23 |
LiquidMigrator.convert_string("Weather looks like <$.conditions> according to the forecast at <$.pretty_date.time>").should == |
23 | 24 |
"Weather looks like {{conditions}} according to the forecast at {{pretty_date.time}}" |
24 | 25 |
end |
@@ -27,6 +28,11 @@ describe LiquidMigrator do |
||
27 | 28 |
LiquidMigrator.convert_string("Escaped: <escape $.content.name>\nNot escaped: <$.content.name>").should == |
28 | 29 |
"Escaped: {{content.name | uri_escape}}\nNot escaped: {{content.name}}" |
29 | 30 |
end |
31 |
+ |
|
32 |
+ it "should raise an exception when encountering complex JSONPaths" do |
|
33 |
+ expect { LiquidMigrator.convert_string("Received <$.content.text.*> from <$.content.name> .") }. |
|
34 |
+ to raise_error("JSONPath '$.content.text.*' is too complex, please check your migration.") |
|
35 |
+ end |
|
30 | 36 |
end |
31 | 37 |
|
32 | 38 |
describe "migrating a hash" do |
@@ -42,6 +48,10 @@ describe LiquidMigrator do |
||
42 | 48 |
LiquidMigrator.convert_hash({'a' => "default", 'a_path' => "$.data"}, {leading_dollarsign_is_jsonpath: true, merge_path_attributes: true}).should == |
43 | 49 |
{'a' => "{{data}}"} |
44 | 50 |
end |
51 |
+ it "should raise an exception when encountering complex JSONPaths" do |
|
52 |
+ expect { LiquidMigrator.convert_hash({'b' => "This is <$.complex[2]>"}) }. |
|
53 |
+ to raise_error("JSONPath '$.complex[2]' is too complex, please check your migration.") |
|
54 |
+ end |
|
45 | 55 |
end |
46 | 56 |
|
47 | 57 |
describe "migrating an actual agent" do |
@@ -69,5 +79,11 @@ describe LiquidMigrator do |
||
69 | 79 |
LiquidMigrator.convert_all_agent_options(@agent) |
70 | 80 |
@agent.reload.options.should == {"auth_token" => 'token', 'color' => 'yellow', 'notify' => false, 'room_name' => 'test', 'username' => '{{username}}', 'message' => '{{message}}'} |
71 | 81 |
end |
82 |
+ |
|
83 |
+ it "should raise an exception when encountering complex JSONPaths" do |
|
84 |
+ @agent.options['username_path'] = "$.very.complex[*]" |
|
85 |
+ expect { LiquidMigrator.convert_all_agent_options(@agent) }. |
|
86 |
+ to raise_error("JSONPath '$.very.complex[*]' is too complex, please check your migration.") |
|
87 |
+ end |
|
72 | 88 |
end |
73 | 89 |
end |